會撰寫 alias 之後,今天我們來學習 linux 指令的輸出跟輸入概念。
前面我們使用很多指令時,有一些指令單純做事後沒有回應,像是 mkdir
。也有些指令,像是 ls
,會印出一些內容。
搭配前面的觀念:其實在 linux 的世界裡面,很多東西,像是指令本身,其實際的內容只是一個檔案而已。
這個觀念,在印出內容上其實也是成立的。對 ls
這樣的指令來說,他是將要輸出的內容,傳輸到一個特殊的檔案「標準輸出」(stdout)裡面。
這樣說起來。其實我們也可以嘗試將原本要輸出在螢幕上的內容,改成輸出到某個實體檔案裡面!
要做到這件事情,我們可以使用 >
這個符號
ls > ls.txt
cat ls.txt
2022-01
2022-02
2022-03
2022-04
2022-05
2022-06
2022-07
2022-08
2022-09
2022-10
2022-11
2022-12
aaa1.txt
ls.txt
test
test1
如果我們重複執行 ls > ls.txt
,由於輸入是從檔案的開頭開始往下覆蓋,檔案依舊會是一樣的內容。
如果我們希望輸入的內容從檔案的尾端開始加入,要使用 >>
這個指令
ls >> ls.txt
cat ls.txt
2022-01
2022-02
2022-03
2022-04
2022-05
2022-06
2022-07
2022-08
2022-09
2022-10
2022-11
2022-12
aaa1.txt
ls.txt
test
test1
2022-01
2022-02
2022-03
2022-04
2022-05
2022-06
2022-07
2022-08
2022-09
2022-10
2022-11
2022-12
aaa1.txt
ls.txt
test
test1
如果我們希望將錯誤訊息導入檔案,那就要改成 2>
這邊的 2
代表的是原本的「標準錯誤」(stderr),我們將原本要寫入這邊的內容導向後面的檔案
asdf 2> asdf.txt
cat asdf.txt
-bash: asdf: command not found
同樣的技巧可以用在我們不想看到錯誤訊息時:將錯誤訊息導入一個不存在的檔案內。在 linux 的世界裡面,可以導入 /dev/null
這個特殊檔案內
asdf 2> /dev/null
順帶一提,/dev/null
作為一個「垃圾桶」這個概念,已經深入 linux 工程師的文化中。比方說,有些人可能會說:「請將投訴傳送到 /dev/null
」 或者抱怨:「我的信件被送到 /dev/null
」
如果你希望同時將指令的輸出和錯誤訊息,都放到某個檔案裡面
,可以使用 &>
這個寫法
asdf &> asdf.txt
今天有關輸入輸出導向的部分,我們先分享到這邊。各位明天見。